#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node *next;
} Node, *LinkList;

void CreateListRear(LinkList L, int n) {
    LinkList rear = L; // rear  代表整个链表的最后一个节点 现在初始化为指向头结点
    LinkList newNode;  // 当前新节点指针

    for (int i = 1; i <= n; i++) {
        // 为当前整数建立结点s
        newNode = (LinkList) malloc(sizeof(Node)); //开辟新结点空间
        if (newNode == NULL) {
            fprintf(stderr, "Memory allocation failed\n");
            return; // 处理内存分配失败
        }

        // 读入一个整数存入s的data域
        printf("Enter an integer for node %d: ", i);
        scanf("%d", &newNode->data);

        // 将新节点作为rear的后继
        newNode->next = NULL; // 新节点的next指向NULL
        rear->next = newNode; // 将新节点链接到链表
        rear = newNode;       // 让rear指向新的表尾结点
    }
}

void PrintList(LinkList L) {
    LinkList current = L->next; // 从头结点的下一个节点开始遍历
    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }
    printf("NULL\n");
}

int main() {
    Node head; // 创建头结点
    LinkList L = &head; // L指向头结点
    int n;
    printf("Enter the number of nodes: ");
    scanf("%d", &n);

    CreateListRear(L, n);
    PrintList(L); // 打印链表以验证

    return 0;
}
